package com.ruoyi.common.core.domain.entity.socket.bean;

import com.ruoyi.common.constant.socket.SystemCode;
import lombok.AllArgsConstructor;
import lombok.Data;

import java.io.Serializable;

/**
 * 服务器与船端通信的socket消息报文中数据段基类。
 */
@Data
@AllArgsConstructor
public abstract class BaseDataPiece implements Serializable {
    /**
     * 系统编号。一般情况下该值通常为0，即主用系统。
     * 0：主用
     * 1：备用1
     * 2：备用2
     * 3：备用3
     */
    private byte systemCode = SystemCode.MAIN.getCode();
    public int deviceType;
    /**
     * 设备编号。0-254。常见取值有：0，1等。
     */
    private byte deviceCode;

    /**
     * 获取数据段长度。
     *
     * @return
     */
    public abstract int getDataPieceLength();

    /**
     * 获取数据段的设备类别。该设备类别非常重要，其用于区分当前数据段属于什么类型的设备。
     *
     * @return
     */
    public abstract void setDeviceType();

    public BaseDataPiece() {
        this((byte) 0);
    }

    public BaseDataPiece(byte deviceCode) {
        this((byte) 0, deviceCode);
    }

    public BaseDataPiece(byte systemCode, byte deviceCode) {
        this.systemCode = systemCode;
        this.deviceCode = deviceCode;
        setDeviceType();
    }
}
